package org.example;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class HeicToJpgConverter {

    /**
     * 将HEIC文件转换为JPG文件
     *
     * @param heicFilePath 输入的HEIC文件路径
     * @param jpgFilePath  输出的JPG文件路径
     * @param quality      JPG质量(1-100)
     * @throws IOException          如果文件操作或进程执行失败
     * @throws InterruptedException 如果进程被中断
     */
    public static void convert(String heicFilePath, String jpgFilePath, int quality)
            throws IOException, InterruptedException {

        // 验证输入文件是否存在
        File heicFile = new File(heicFilePath);
        if (!heicFile.exists() || !heicFile.isFile()) {
            throw new IllegalArgumentException("HEIC文件不存在: " + heicFilePath);
        }

        // 验证质量参数
        if (quality < 1 || quality > 100) {
            throw new IllegalArgumentException("JPG质量必须在1-100之间");
        }

        // 构建命令行
        ProcessBuilder processBuilder = new ProcessBuilder(
                "heif-convert",
                "-q", String.valueOf(quality),
                heicFilePath,
                jpgFilePath
        );

        // 重定向错误流到输入流，便于统一处理
        processBuilder.redirectErrorStream(true);

        // 启动进程
        Process process = processBuilder.start();

        // 读取命令输出
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()))) {

            String line;
            StringBuilder output = new StringBuilder();

            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }

            // 等待进程完成
            int exitCode = process.waitFor();

            if (exitCode != 0) {
                throw new IOException("转换失败，退出码: " + exitCode + "\n输出: " + output.toString());
            }

            System.out.println("转换成功: " + jpgFilePath);
            System.out.println("转换详情:\n" + output.toString());
        }
    }

    // 示例用法
    public static void main(String[] args) {
        try {
            // 设置默认值
            String heicFile = "1.heic";
            String jpgFile = "1.jpg";
            int quality = 80;

            // 检查命令行参数
            if (args.length > 0) {
                heicFile = args[0];  // 第一个参数作为输入文件路径
            }
            if (args.length > 1) {
                jpgFile = args[1];  // 第二个参数作为输出文件路径
            }
            if (args.length > 2) {
                try {
                    quality = Integer.parseInt(args[2]);  // 第三个参数作为质量参数
                } catch (NumberFormatException e) {
                    System.err.println("质量参数必须是数字，使用默认值80");
                }
            }

            // 执行转换
            HeicToJpgConverter.convert(heicFile, jpgFile, quality);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
